package com.bzkj.basicinfo.service.ncc;

import com.bzkj.basicinfo.domain.basic.vo.PrintSkuInfoVo;
import com.bzkj.basicinfo.domain.basic.vo.WarehouseExportVo;
import com.bzkj.basicinfo.domain.ncc.Warehouse;
import com.bzkj.basicinfo.domain.wms.vo.ExportWMSWarehouseOutDetailVo;
import com.bzkj.basicinfo.domain.wms.vo.SkuQueryExportDataVo;
import com.bzkj.common.core.domain.AjaxResult;
import com.bzkj.common.core.domain.R;

import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.List;

/**
 * @author Admin
 * @description 仓库服务接口，定义了仓库的基本操作
 */
public interface WarehouseService {
    /**
     * 新增仓库
     * @param warehouse 新增的仓库对象
     * @return 新增的仓库记录数
     */
    AjaxResult addWarehouse(Warehouse warehouse);

    /**
     * 更新仓库
     * @param warehouse 更新的仓库对象
     * @return 更新的仓库记录数
     */
    AjaxResult updateWarehouse(Warehouse warehouse);

    /**
     * 根据ID查询仓库
     * @param stoId 仓库的唯一标识符
     * @return 查询到的仓库对象
     */
    Warehouse getWarehouseById(String stoId);

    /**
     * 查询所有仓库
     * @return 所有仓库的列表
     */
    List<Warehouse> getAllWarehouses(Warehouse warehouse);
    /**
     * 查询所有仓库
     * @return 所有仓库的列表
     */
    List<Warehouse> getAllWarehousesList(Warehouse warehouse);


    /**
     * 删除仓库
     * @param stoId 仓库的唯一标识符
     * @return 删除的仓库记录数
     */
    int deleteWarehouse(String stoId);

    /**
     * 检查仓库是否有关联的库区
     *
     * @param stoId 仓库ID
     * @return true 如果仓库有关联的库区，false 否则
     */
    boolean hasAreas(String stoId);

    AjaxResult getNccBasicStoStock();

    List<HashMap<String, Object>> queryStoWareHouse(String sto_code);

    AjaxResult updateEnableStatus(String status, String stoId);

    R getWarehouseInBasic(String dataType, String sType, String wareHouseMode);

    R getWarehouseInNoFinishBills(String dataType, String wareHouseMode, String noFinishMode);

    R getWarehouseInStatistic(String dataType, String wareHouseMode, String wareHouseModeValue, String wareHouseName, String wareHouseValue, String senderId, String senderValue, String skuId, String skuIdValue, String sType);

    R getWarehouseOutBasic(String dataType, String sType, String wareHouseMode);

    R getWarehouseOutNoFinishBills(String dataType, String wareHouseMode, String noFinishMode);

    R getWarehouseOutStatistic(String dataType, String wareHouseMode, String wareHouseModeValue, String wareHouseName, String wareHouseValue, String customerId, String senderValue, String skuId, String skuIdValue, String sType);

    R findAuditBills(String billsID);

    R findAuditSku(String skuId, String batchNo, String barCode, String beginDate, String endDate,Integer pageNum,Integer pageSize);

    R findAuditUser(String userId, String beginDate, String endDate,Integer pageNum,Integer pageSize);

    R findStatisticSto(String stoCode);

    R getStoUnitQuery(String stoCode, String unitIdValue, String unitId);

    R getSkuAlarms(String alarmsMode, String vbatchNo, String drugName,String startDate, String endDate,
                   String alarmsValues, Integer pageNum,Integer pageSize);

    AjaxResult exportSkuAlarms(String alarmsMode, String vbatchNo, String drugName,String startDate, String endDate,
                               String alarmsValues,Integer pageNum,Integer pageSize,HttpServletResponse response);

    R getWarehouseOutDetailProductPrint(List<String> cgeneralbid);

    R getStatisticStoUnit(String stoAreaCode, String stoUnitCode);

    List<HashMap<String,Object>> getSkuQuery(String skuId, String batchNoMode, String pkBatchNo);

    R getWarehouseStatistic(String skuclassId,String skuclassValue,String wareHouseID, String wareHouseValue, String skuID, String skuIDValue, String batchNo, String batchNoValue, String expDateNum, String expDateValue, String resetDateNum, String resetDateValue, String stockNum, String stocValue, String skuState,String skuStateValue, String sType);

    /**
     * 请验管理数据接口（过滤掉待验不为0的数据）
     * @param skuclassId
     * @param skuclassValue
     * @param wareHouseID
     * @param wareHouseValue
     * @param skuID
     * @param skuIDValue
     * @param batchNo
     * @param batchNoValue
     * @param expDateNum
     * @param expDateValue
     * @param resetDateNum
     * @param resetDateValue
     * @param stockNum
     * @param stocValue
     * @param skuState
     * @param skuStateValue
     * @param sType
     * @return
     */
    R getWarehouseStatistics(String skuclassId,String skuclassValue,String wareHouseID, String wareHouseValue, String skuID, String skuIDValue, String batchNo, String batchNoValue, String expDateNum, String expDateValue, String resetDateNum, String resetDateValue, String stockNum, String stocValue, String skuState,String skuStateValue, String sType);

    R getWarehouseBasic(String sType);

    R getBillStatusAll();

    R findTurnoverStatistic(String beginDate, String rndDate, String skuClass, String skuClassValue, String wareHouseName, String wareHouseValue, String skuID, String skuIDValue, String batchNo, String batchNoValue, String skuState, String sType);

    List<SkuQueryExportDataVo> skuQueryExportData(String skuclassId, String skuclassValue, String wareHouseID, String wareHouseValue, String skuID, String skuIDValue, String batchNo, String batchNoValue, String expDateNum, String expDateValue, String resetDateNum, String resetDateValue, String stockNum, String stocValue, String skuState, String skuStateValue, String sType,Integer pageNum,Integer pageSize);

    /**
     * 库存整体统计导出
     * @return
     */
    List<WarehouseExportVo> exportWareHouseStatistic(String skuclassId, String skuclassValue, String wareHouseID, String wareHouseValue, String skuID, String skuIDValue, String batchNo, String batchNoValue, String expDateNum, String expDateValue, String resetDateNum, String resetDateValue, String stockNum, String stocValue, String skuState, String skuStateValue, Integer pageNum, Integer pageSize,HttpServletResponse response);

    List<WarehouseExportVo> exportPdfWareHouseStatistic(String skuclassId, String skuclassValue, String wareHouseID, String wareHouseValue, String skuID, String skuIDValue, String batchNo, String batchNoValue, String expDateNum, String expDateValue, String resetDateNum, String resetDateValue, String stockNum, String stocValue, String skuState, String skuStateValue,Integer pageNum, Integer pageSize, HttpServletResponse response);

    List<WarehouseExportVo> exportCsvWareHouseStatistic(String skuclassId, String skuclassValue, String wareHouseID, String wareHouseValue, String skuID, String skuIDValue, String batchNo, String batchNoValue, String expDateNum, String expDateValue, String resetDateNum, String resetDateValue, String stockNum, String stocValue, String skuState, String skuStateValue, Integer pageNum, Integer pageSize,HttpServletResponse response);

    R wmsUserKpi(String dataType, String sType);

    R getWMSWarehouseDetail(String beginDate, String endDate, String skuClass, String skuClassValue, String wareHouseName, String wareHouseValue, String skuId, String skuIdValue, String batchNo, String batchNoValue);

    AjaxResult exportWMSWarehouseDetail(String beginDate, String endDate, String skuClass, String skuClassValue, String wareHouseName, String wareHouseValue, String skuId, String skuIdValue, String batchNo, String batchNoValue,Integer pageNum,Integer pageSize, HttpServletResponse response);

    AjaxResult exportPdfWMSWarehouseDetail(String beginDate, String endDate, String skuClass, String skuClassValue, String wareHouseName, String wareHouseValue, String skuId, String skuIdValue, String batchNo, String batchNoValue,Integer pageNum,Integer pageSize, HttpServletResponse response);

    List<ExportWMSWarehouseOutDetailVo> exportCsvWMSWarehouseDetail(String beginDate, String endDate, String skuClass, String skuClassValue, String wareHouseName, String wareHouseValue, String skuId, String skuIdValue, String batchNo, String batchNoValue, Integer pageNum, Integer pageSize, HttpServletResponse response);

    /**
     * 物料标签补打数据接口
     * @param vo
     * @return
     */
    R printSkuInfo(PrintSkuInfoVo vo);
}
